<!DOCTYPE html>
<html lang="zh-Hans">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">


  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">



<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.3/css/all.min.css" integrity="sha256-2H3fkXt6FEmrReK448mDVGKb3WW2ZZw35gI7vqHOE4Y=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.1.1/animate.min.css" integrity="sha256-PR7ttpcvz8qrF57fur/yAx1qXMFJeJFiA6pSzWi0OIE=" crossorigin="anonymous">

<script class="next-config" data-name="main" type="application/json">{&quot;hostname&quot;:&quot;www.nilstorm.com&quot;,&quot;root&quot;:&quot;&#x2F;&quot;,&quot;images&quot;:&quot;&#x2F;images&quot;,&quot;scheme&quot;:&quot;Gemini&quot;,&quot;version&quot;:&quot;8.5.0&quot;,&quot;exturl&quot;:false,&quot;sidebar&quot;:{&quot;position&quot;:&quot;left&quot;,&quot;display&quot;:&quot;post&quot;,&quot;padding&quot;:18,&quot;offset&quot;:12},&quot;copycode&quot;:false,&quot;bookmark&quot;:{&quot;enable&quot;:false,&quot;color&quot;:&quot;#222&quot;,&quot;save&quot;:&quot;auto&quot;},&quot;fancybox&quot;:false,&quot;mediumzoom&quot;:false,&quot;lazyload&quot;:false,&quot;pangu&quot;:false,&quot;comments&quot;:{&quot;style&quot;:&quot;tabs&quot;,&quot;active&quot;:null,&quot;storage&quot;:true,&quot;lazyload&quot;:false,&quot;nav&quot;:null},&quot;motion&quot;:{&quot;enable&quot;:true,&quot;async&quot;:false,&quot;transition&quot;:{&quot;post_block&quot;:&quot;fadeIn&quot;,&quot;post_header&quot;:&quot;fadeInDown&quot;,&quot;post_body&quot;:&quot;fadeInDown&quot;,&quot;coll_header&quot;:&quot;fadeInLeft&quot;,&quot;sidebar&quot;:&quot;fadeInUp&quot;}},&quot;prism&quot;:false,&quot;i18n&quot;:{&quot;placeholder&quot;:&quot;Searching...&quot;,&quot;empty&quot;:&quot;We didn&#39;t find any results for the search: ${query}&quot;,&quot;hits_time&quot;:&quot;${hits} results found in ${time} ms&quot;,&quot;hits&quot;:&quot;${hits} results found&quot;}}</script><script src="/js/config.js"></script>
<meta name="description" content="内部类内部类是指在一个外部类的内部再定义一个类，是一个编译时的概念，一旦编译成功，内部类与其外部类就会成为完全不同的两类，只是内部类的前面会冠以外部类的类名和$符号，如一个outer类内部定义了一个inner的内部类，那么编译完成后会生成outer.class和outer$inner.class两个类，因此内部类的成员变量与方法可以与外部类相同。从内部类的定义上来看，其实内部类严重破坏了良好的代码">
<meta property="og:type" content="article">
<meta property="og:title" content="Java 内部类浅析">
<meta property="og:url" content="http://www.nilstorm.com/2017/9b22d70c.html">
<meta property="og:site_name" content="Lam&#39;s Blog">
<meta property="og:description" content="内部类内部类是指在一个外部类的内部再定义一个类，是一个编译时的概念，一旦编译成功，内部类与其外部类就会成为完全不同的两类，只是内部类的前面会冠以外部类的类名和$符号，如一个outer类内部定义了一个inner的内部类，那么编译完成后会生成outer.class和outer$inner.class两个类，因此内部类的成员变量与方法可以与外部类相同。从内部类的定义上来看，其实内部类严重破坏了良好的代码">
<meta property="og:locale">
<meta property="og:image" content="https://tva1.sinaimg.cn/large/007S8ZIlgy1gee6wkfo69j30e9026gm4.jpg">
<meta property="article:published_time" content="2017-03-02T08:52:25.000Z">
<meta property="article:modified_time" content="2021-06-06T08:08:18.171Z">
<meta property="article:author" content="LinBinghe">
<meta property="article:tag" content="Java">
<meta property="article:tag" content="内部类">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://tva1.sinaimg.cn/large/007S8ZIlgy1gee6wkfo69j30e9026gm4.jpg">


<link rel="canonical" href="http://www.nilstorm.com/2017/9b22d70c.html">



<script class="next-config" data-name="page" type="application/json">{&quot;sidebar&quot;:&quot;&quot;,&quot;isHome&quot;:false,&quot;isPost&quot;:true,&quot;lang&quot;:&quot;zh-Hans&quot;,&quot;comments&quot;:true,&quot;permalink&quot;:&quot;http:&#x2F;&#x2F;www.nilstorm.com&#x2F;2017&#x2F;9b22d70c.html&quot;,&quot;path&quot;:&quot;2017&#x2F;9b22d70c.html&quot;,&quot;title&quot;:&quot;Java 内部类浅析&quot;}</script>

<script class="next-config" data-name="calendar" type="application/json">&quot;&quot;</script>
<title>Java 内部类浅析 | Lam's Blog</title>
  




  <noscript>
    <link rel="stylesheet" href="/css/noscript.css">
  </noscript>
<link rel="alternate" href="/atom.xml" title="Lam's Blog" type="application/atom+xml">
</head>

<body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
  <div class="headband"></div>

  <main class="main">
    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="Toggle navigation bar" role="button">
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <i class="logo-line"></i>
      <h1 class="site-title">Lam's Blog</h1>
      <i class="logo-line"></i>
    </a>
      <p class="site-subtitle" itemprop="description">Knowledge as Action</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>







</div>
        
  
  <div class="toggle sidebar-toggle" role="button">
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
  </div>

  <aside class="sidebar">

    <div class="sidebar-inner sidebar-nav-active sidebar-toc-active">
      <ul class="sidebar-nav">
        <li class="sidebar-nav-toc">
          Table of Contents
        </li>
        <li class="sidebar-nav-overview">
          Overview
        </li>
      </ul>

      <div class="sidebar-panel-container">
        <!--noindex-->
        <div class="post-toc-wrap sidebar-panel">
            <div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%86%85%E9%83%A8%E7%B1%BB"><span class="nav-number">1.</span> <span class="nav-text">内部类</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%86%85%E9%83%A8%E7%B1%BB%E7%9A%84%E5%88%86%E7%B1%BB%E5%8F%8A%E7%A4%BA%E4%BE%8B"><span class="nav-number">2.</span> <span class="nav-text">内部类的分类及示例</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%88%90%E5%91%98%E5%86%85%E9%83%A8%E7%B1%BB"><span class="nav-number">2.1.</span> <span class="nav-text">成员内部类</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%B1%80%E9%83%A8%E5%86%85%E9%83%A8%E7%B1%BB"><span class="nav-number">2.2.</span> <span class="nav-text">局部内部类</span></a></li></ol></li></ol></div>
        </div>
        <!--/noindex-->

        <div class="site-overview-wrap sidebar-panel">
          <div class="site-author site-overview-item animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="LinBinghe"
      src="/images/avatar.jpg">
  <p class="site-author-name" itemprop="name">LinBinghe</p>
  <div class="site-description" itemprop="description">Knowledge as Action</div>
</div>
<div class="site-state-wrap site-overview-item animated">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives">
          <span class="site-state-item-count">39</span>
          <span class="site-state-item-name">posts</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
        <span class="site-state-item-count">13</span>
        <span class="site-state-item-name">categories</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
        <span class="site-state-item-count">60</span>
        <span class="site-state-item-name">tags</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author site-overview-item animated">
      <span class="links-of-author-item">
        <a href="https://github.com/LinBinghe" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;LinBinghe" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i></a>
      </span>
      <span class="links-of-author-item">
        <a href="https://www.zhihu.com/people/shawn_lam" title="Zhihu → https:&#x2F;&#x2F;www.zhihu.com&#x2F;people&#x2F;shawn_lam" rel="noopener" target="_blank"><i class="fab fa-zhihu fa-fw"></i></a>
      </span>
      <span class="links-of-author-item">
        <a href="mailto:linbinghe@gmail.com" title="E-Mail → mailto:linbinghe@gmail.com" rel="noopener" target="_blank"><i class="fa fa-envelope fa-fw"></i></a>
      </span>
  </div>



        </div>
      </div>
    </div>
  </aside>
  <div class="sidebar-dimmer"></div>


    </header>

    
  <div class="back-to-top" role="button" aria-label="Back to top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>

<noscript>
  <div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>


    <div class="main-inner post posts-expand">


  


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="zh-Hans">
    <link itemprop="mainEntityOfPage" href="http://www.nilstorm.com/2017/9b22d70c.html">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.jpg">
      <meta itemprop="name" content="LinBinghe">
      <meta itemprop="description" content="Knowledge as Action">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lam's Blog">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          Java 内部类浅析
        </h1>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">Posted on</span>

      <time title="Created: 2017-03-02 16:52:25" itemprop="dateCreated datePublished" datetime="2017-03-02T16:52:25+08:00">2017-03-02</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">Edited on</span>
        <time title="Modified: 2021-06-06 16:08:18" itemprop="dateModified" datetime="2021-06-06T16:08:18+08:00">2021-06-06</time>
      </span>
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-folder"></i>
      </span>
      <span class="post-meta-item-text">In</span>
        <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
          <a href="/categories/Java/" itemprop="url" rel="index"><span itemprop="name">Java</span></a>
        </span>
    </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
        <h1 id="内部类"><a href="#内部类" class="headerlink" title="内部类"></a>内部类</h1><p>内部类是指在一个外部类的内部再定义一个类，是一个编译时的概念，一旦编译成功，内部类与其外部类就会成为完全不同的两类，只是内部类的前面会冠以外部类的类名和$符号，如一个outer类内部定义了一个inner的内部类，那么编译完成后会生成outer.class和outer$inner.class两个类，因此内部类的成员变量与方法可以与外部类相同。<br>从内部类的定义上来看，其实内部类严重破坏了良好的代码结构，那么为什么还要使用内部类呢？因为内部类可以随意使用外部类的成员变量（包括私有的）而不用生成外部类对象，这也是内部类的唯一优点。</p>
<h1 id="内部类的分类及示例"><a href="#内部类的分类及示例" class="headerlink" title="内部类的分类及示例"></a>内部类的分类及示例</h1><p>内部类分为成员内部类、局部内部类、静态内部类和匿名内部类。下面针对各个内部类进行介绍：<br><span id="more"></span></p>
<h2 id="成员内部类"><a href="#成员内部类" class="headerlink" title="成员内部类"></a>成员内部类</h2><p>作为外部类的一个成员存在，与外部类的属性、方法并列。成员内部类中可以访问外部类的所有成员，当外部类的变量与内部类的变量名重复时，使用外部类名.this.变量名可以对外部类的变量进行调用，如果没有重复时可直接使用变量名进行调用。在普通外部类方法中访问静态内部类可new出成员内部类对象进而直接调用其中的方法，而在静态外部类方法中需要先new出外部类对象，再调用外部类对象名.new 内部类的方式来获得成员内部类对象。</p>
<p>成员内部类中不能定义静态变量，因为成员内部类需要先创建了外部类，才能创建它自己的。<br>成员内部类可以使用外部类的私有成员和属性，同时其在外部类中定义了不可访问的属性，这样就在外部类中实现了比外部类的private还要小的访问权限。</p>
<p>示例代码如下：</p>
<pre><code>
/** 
 *  
 * @ClassName: MemberInnerClass 
 * @Description: 成员内部类 
 * @author ADAM 
 * @date 2014年7月25日 上午9:20:28 
 * 
 */  
public class MemberInnerClass &#123;  
    private int i = 0;  

    public class Inner &#123;// 成员内部类可加权限修饰符  
        int i = 3;  

        public void print() &#123;  
            System.out.println(i);// 输出为内部类的i，值为3  
            System.out.println(this.i);// 输出为内部类的i，值为3  
            System.out.println(MemberInnerClass.this.i);// 输出外部类的i，值为0  
        &#125;  
    &#125;  

    public void print() &#123;  
        (new Inner()).print();// 外部类普通方法调用成员内部类直接new出内部类进行调用  
    &#125;  

    public static void main(String[] args) &#123;  
        ((new MemberInnerClass()).new Inner()).print();// 外部类静态方法中调用成员内部类首先new出外部类然后new出内部类进行调用  
    &#125;  
&#125;  
</code></pre>

<h2 id="局部内部类"><a href="#局部内部类" class="headerlink" title="局部内部类"></a>局部内部类</h2><p>即在方法中定义的内部类，与局部变量类似，在局部内部类前不加修饰符public或private，其范围为定义它的代码块。局部内部类中不可定义静态变量，可以访问外部类（即方法）中的变量，但是变量必须是final。局部内部类与外部类的命名重名时的调用方法与成员内部类相同，访问局部内部类必须得先有外部类对象。</p>
<p>在类外不可直接生成局部内部类（保证局部内部类对外是不可见的）。要想使用局部内部类时需要生成外部类对象，对象再去调用方法，在方法中才能调用其局部内部内。通过内部类与接口达到了一个强制的弱耦合，用局部内部类来实现接口，并在方法中返回接口类型，使局部内部类不可见，屏蔽实现类的可见性。</p>
<p>示例代码如下：</p>
<pre><code>
/** 
 *  
 * @ClassName: LocalInnerClass  
 * @Description: 局部内部类 
 * @author ADAM 
 * @date 2014年7月25日 上午10:36:26  
 * 
 */  
public class LocalInnerClass &#123;  
    private int j = 3;  
    private int i = 2;  

    public void test() &#123;  
        MemberInnerClass memberInnerClass = new MemberInnerClass();  
// 若要访问其他类中的成员内部类只能当该成员内部类的修饰符为public才可  
// 否则编译错误，即成员内部类可以再类内部实现比private还要小的权限  
        memberInnerClass.new Inner();  
        final int i = 0;  
        class Inner &#123;// 此处不得加上private等修饰符，否则编译错误  
            int i = 1;  

            public void print() &#123;  
                System.out.println(j);饰符，否则编译错误  
                System.out.println(i);// 此时输出局部内部类的i,外部方法中的变量只能通过传参的形式进行调用  
                System.out.println(LocalInnerClass.this.i);// 此时输出的是外部类中的i  
            &#125;  
        &#125;  
        Inner inner = new Inner();// 局部内部类只能在方法内实例化并进行调用  
        inner.print();  
    &#125;  

    public static void main(String[] args) &#123;  
        (new LocalInnerClass()).test();  
    &#125;  
&#125;  
</code></pre>
局部内部类不仅可以定义在方法中还可以定义在作用域内。以下提供两个Thinking in Java的例子
*定义在方法内：*
<pre><code>
public class Parcel4 &#123;   
    public Destination destination(String s) &#123;   
        class PDestination implements Destination &#123;   
            private String label;   

            private PDestination(String whereTo) &#123;   
                label = whereTo;   
            &#125;   

            public String readLabel() &#123;   
                return label;   
            &#125;   
        &#125;   
        return new PDestination(s);   
    &#125;   

    public static void main(String[] args) &#123;   
        Parcel4 p = new Parcel4();   
        Destination d = p.destination("Tasmania");   
    &#125;   
&#125;
</code></pre>
*定义在作用域里：*
<pre><code>
public class Parcel5 &#123;   
    private void internalTracking(boolean b) &#123;   
        if (b) &#123;   
            class TrackingSlip &#123;   
                private String id;   
                TrackingSlip(String s) &#123;   
                    id = s;   
                &#125;   
                String getSlip() &#123;   
                    return id;   
                &#125;   
            &#125;   
            TrackingSlip ts = new TrackingSlip("slip");   
            String s = ts.getSlip();   
        &#125;   
    &#125;   

    public void track() &#123;   
        internalTracking(true);   
    &#125;   

    public static void main(String[] args) &#123;   
        Parcel5 p = new Parcel5();   
        p.track();   
    &#125;   
&#125;
</code></pre>
局部内部类也像别的类一样进行编译，只是作用域有所不同，只在该方法或者条件的作用域内才能使用，出了这些作用域则无法被使用。
## 静态内部类
静态内部类也称为嵌套内部类，定义在类中，任何方法外，用static定义，静态内部类中可以定义静态或非静态的成员，其可用public、private等修饰符修饰，一般使用public修饰，方便调用，其只能访问外部类中的静态成员。外部类访问静态内部类中的静态成员时直接使用内部类.静态成员，访问静态内部类的非静态成员时先实例化静态内部类再通过对象访问。

         生成一个静态内部类不需要外部类对象成员，这是与成员内部类的区别，同时普通内部类不能有static方法和属性，也不能包含嵌套类，静态内部类的对象可以直接生成：外部类.内部类 对象名= new 外部类.内部类()即可

         注意：当类与接口（或者接口与接口）发生方法命名冲突时，必须使用内部类来实现。用接口不能完全地实现多继承，用接口配合内部类才能实现真正的多继承。

示例代码如下：
<pre><code>
/** 
 *  
 * @ClassName: StaticInnerClass  
 * @Description: 静态内部类 
 * @author ADAM 
 * @date 2014年7月25日 上午10:37:04  
 * 
 */  
public class StaticInnerClass &#123;  
    private int i = 1;  
    public static int j = 1;  
    public int k = 0;  

    public static class Inner &#123;  
        private int i = 0;  
        private static int j = 0;// 可定义静态与非静态成员  

        public static void print() &#123;  
//          System.out.println(k);// 编译错误，不得调用外部类中的非静态成员  
            System.out.println(new StaticInnerClass().i);//访问外部类中的非静态成员变量需要先实例化外部类  
            System.out.println(j);  
            System.out.println(new StaticInnerClass().j);// 静态内部类使用外部类中的静态成员  
        &#125;  
    &#125;  

    public static void main(String[] args) &#123;  
        Inner.print();// 外部类静态方法或者非静态方法调用静态内部类中的静态成员时直接内部类名.成员即可  
        StaticInnerClass.Inner inner = new StaticInnerClass.Inner();// 静态内部类的实例化不需要先实例化外部类  
        System.out.println(inner.i);// 访问静态内部类中的非静态成员时需要先实例化静态内部类  
    &#125;  
&#125;  
</code></pre>
通过内部类实现多继承示例代码如下：
<pre><code>
/** 
 *  
 * @ClassName: Pencil  
 * @Description: 笔类 
 * @author ADAM 
 * @date 2014年7月25日 上午10:42:59  
 * 
 */  
public abstract class Pencil &#123;  
    public abstract void write();  
&#125;  
/** 
 *  
 * @ClassName: Eraser  
 * @Description: 橡皮擦类 
 * @author ADAM 
 * @date 2014年7月25日 上午10:43:28  
 * 
 */  
public abstract class Eraser &#123;  
    public abstract void erase();  
&#125;  
/** 
 *  
 * @ClassName: PencilWithEraser  
 * @Description: 多继承类 
 * @author ADAM 
 * @date 2014年7月25日 上午10:43:53  
 * 
 */  
public class PencilWithEraser &#123;  
    private MyPencil pencil = new MyPencil();  
    private MyEraser eraser = new MyEraser();  

    private class MyPencil extends Pencil &#123;//继承笔类  

        @Override  
        public void write() &#123;  
            System.out.println("To Write");  
        &#125;  

    &#125;  

    private class MyEraser extends Eraser &#123;//继承橡皮擦类  
        @Override  
        public void erase() &#123;  
            System.out.println("To Erase");  
        &#125;  

    &#125;  

    // 本类自己的方法，调用继承类中的方法  
    public void write() &#123;  
        pencil.write();  
    &#125;  

    public void erase() &#123;  
        eraser.erase();  
    &#125;  

    public static void main(String[] args) &#123;  
        PencilWithEraser pencilWithEraser = new PencilWithEraser();  
        pencilWithEraser.write();  
        pencilWithEraser.erase();  
    &#125;  
&#125;  
</pre></code>
## 匿名内部类
用于继承其他类或是实现接口，并不需要增加额外的方法，只是对继承方法的重写或实现，也使用于只是为了得到一个对象实例，不需要知道其实际类型，此时类名是没有意义的，也不需要被使用到。
示例代码如下：
<pre><code>
/** 
 *  
 * @ClassName: AnonymousInnerClass  
 * @Description: 匿名内部类 
 * @author ADAM 
 * @date 2014年7月25日 上午10:38:25  
 * 
 */  
public class AnonymousInnerClass &#123;  
    public void click(OnClickListener onClickListener) &#123;  
        System.out.println("click,click");  
    &#125;  

    public static void main(String[] args) &#123;  
        AnonymousInnerClass anonymousInnerClass = new AnonymousInnerClass();  
        anonymousInnerClass.click(new OnClickListener() &#123;// 直接new出匿名内部类，不需要保存对象，一般用于继承其他类或是实现接口  
                    @Override  
                    public void onClick() &#123;  
                        System.out.println("Inner Click");  
                    &#125;  
                &#125;);  
    &#125;  
&#125;  
</code></pre>



<hr>
<p><strong>版权声明</strong></p>
<p><img src="https://tva1.sinaimg.cn/large/007S8ZIlgy1gee6wkfo69j30e9026gm4.jpg" alt="Creative Commons BY-NC-ND 4.0 International License"></p>
<p><a target="_blank" rel="noopener" href="http://linbinghe.me/">Lam’s Blog</a> by <a target="_blank" rel="noopener" href="http://linbinghe.me/">Binghe Lin</a> is licensed under a <a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons BY-NC-ND 4.0 International License</a>.<br>由<a target="_blank" rel="noopener" href="http://linbinghe.me/">林炳河</a>创作并维护的<a target="_blank" rel="noopener" href="http://linbinghe.me/">Lam’s Blog</a>采用<a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">创作共用保留署名-非商业-禁止演绎4.0国际许可证</a>。</p>
<p>本文首发于<a target="_blank" rel="noopener" href="http://linbinghe.me/">Lam’s Blog - Knowledeg as Action</a>，版权所有，侵权必究。</p>
<p>本文永久链接：<a target="_blank" rel="noopener" href="http://codinglife.me/2017/9b22d70c.html">http://codinglife.me/2017/9b22d70c.html</a></p>

    </div>

    
    
    

    <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/Java/" rel="tag"># Java</a>
              <a href="/tags/%E5%86%85%E9%83%A8%E7%B1%BB/" rel="tag"># 内部类</a>
          </div>

        

          <div class="post-nav">
            <div class="post-nav-item">
                <a href="/2017/d44838b7.html" rel="prev" title="计算机专业术语整理">
                  <i class="fa fa-chevron-left"></i> 计算机专业术语整理
                </a>
            </div>
            <div class="post-nav-item">
                <a href="/2017/b8a60a5e.html" rel="next" title="FindBugs：简介与使用">
                  FindBugs：简介与使用 <i class="fa fa-chevron-right"></i>
                </a>
            </div>
          </div>
    </footer>
  </article>
</div>






</div>
  </main>

  <footer class="footer">
    <div class="footer-inner">


<div class="copyright">
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">LinBinghe</span>
</div>
  <div class="powered-by">Powered by <a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/" rel="noopener" target="_blank">NexT.Gemini</a>
  </div>

    </div>
  </footer>

  
  <script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script>
<script src="/js/comments.js"></script><script src="/js/utils.js"></script><script src="/js/motion.js"></script><script src="/js/next-boot.js"></script>

  






  





</body>
</html>
